/*
 *   Copyright (C) Key Bridge Global LLC and/or its affiliates.
 *
 *   This program is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.keybridgeglobal.wsif;

import com.keybridgeglobal.wsif.device.*;
import com.keybridgeglobal.wsif.enumerated.EnumWsifStationClass;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.*;

/**
 * <p>Java class for station complex type.
 * <p/>
 * <p>The following schema fragment specifies the expected content contained
 * within this class.
 * <p/>
 * <
 * pre>
 * &lt;complexType name="station">
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element ref="{}location"/>
 *         &lt;element ref="{}schedule"/>
 *         &lt;element name="contactList" type="{}contact" maxOccurs="unbounded" minOccurs="0"/>
 *         &lt;choice maxOccurs="unbounded" minOccurs="0">
 *           &lt;element ref="{}device"/>
 *           &lt;element ref="{}rxGeneric"/>
 *           &lt;element ref="{}rxLpaux"/>
 *           &lt;element ref="{}txGeneric"/>
 *           &lt;element ref="{}txLandMobile"/>
 *           &lt;element ref="{}txLpaux"/>
 *           &lt;element ref="{}txMicrowave"/>
 *           &lt;element ref="{}txTv"/>
 *           &lt;element ref="{}txWsd"/>
 *         &lt;/choice>
 *       &lt;/sequence>
 *       &lt;attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
 *       &lt;attribute name="description" type="{http://www.w3.org/2001/XMLSchema}string" />
 *       &lt;attribute name="stationClass" use="required" type="{}enumWsifStationClass" />
 *       &lt;attribute name="primary" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
 *       &lt;attribute name="stationType" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * <p/>
 *
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "station", propOrder = {
  "location",
  "schedule",
  "contactList",
  "deviceOrRxGenericOrRxLpaux"
})
@XmlRootElement
public class Station {

  @XmlElement(required = true)
  protected Location location;
  @XmlElement(required = true)
  protected Schedule schedule;
  protected List<Contact> contactList;
  @XmlElements({
    @XmlElement(name = "device"),
    @XmlElement(name = "rxGeneric", type = RxGeneric.class),
    @XmlElement(name = "rxLpaux", type = RxLpaux.class),
    @XmlElement(name = "txGeneric", type = TxGeneric.class),
    @XmlElement(name = "txLandMobile", type = TxLandMobile.class),
    @XmlElement(name = "txLpaux", type = TxLpaux.class),
    @XmlElement(name = "txMicrowave", type = TxMicrowave.class),
    @XmlElement(name = "txTv", type = TxTv.class),
    @XmlElement(name = "txWsd", type = TxWsd.class)
  })
  protected List<Device> deviceOrRxGenericOrRxLpaux;
  @XmlAttribute(name = "name", required = true)
  protected String name;
  @XmlAttribute(name = "description")
  protected String description;
  @XmlAttribute(name = "stationClass", required = true)
  protected EnumWsifStationClass stationClass;
  @XmlAttribute(name = "primary", required = true)
  protected boolean primary;
  @XmlAttribute(name = "stationType", required = true)
  protected String stationType;

  /**
   * Gets the value of the location property.
   * <p/>
   * @return possible object is {@link Location }
   *
   */
  public Location getLocation() {
    return location;
  }

  /**
   * Sets the value of the location property.
   * <p/>
   * @param value allowed object is {@link Location }
   *
   */
  public void setLocation(Location value) {
    this.location = value;
  }

  /**
   * Gets the value of the schedule property.
   * <p/>
   * @return possible object is {@link Schedule }
   *
   */
  public Schedule getSchedule() {
    return schedule;
  }

  /**
   * Sets the value of the schedule property.
   * <p/>
   * @param value allowed object is {@link Schedule }
   *
   */
  public void setSchedule(Schedule value) {
    this.schedule = value;
  }

  /**
   * Gets the value of the contactList property.
   * <p/>
   * <p> This accessor method returns a reference to the live list, not a
   * snapshot. Therefore any modification you make to the returned list will be
   * present inside the JAXB object. This is why there is not a
   * <CODE>set</CODE> method for the contactList property.
   * <p/>
   * <p> For example, to add a new item, do as follows:
   * <pre>
   *    getContactList().add(newItem);
   * </pre>
   * <p/>
   *
   * <p> Objects of the following type(s) are allowed in the list
     * {@link Contact }
   *
   *
   */
  public List<Contact> getContactList() {
    if (contactList == null) {
      contactList = new ArrayList<Contact>();
    }
    return this.contactList;
  }

  /**
   * Gets the value of the deviceOrRxGenericOrRxLpaux property.
   * <p/>
   * <p> This accessor method returns a reference to the live list, not a
   * snapshot. Therefore any modification you make to the returned list will be
   * present inside the JAXB object. This is why there is not a
   * <CODE>set</CODE> method for the deviceOrRxGenericOrRxLpaux property.
   * <p/>
   * <p> For example, to add a new item, do as follows:
   * <pre>
   *    getDeviceOrRxGenericOrRxLpaux().add(newItem);
   * </pre>
   * <p/>
   *
   * <p> Objects of the following type(s) are allowed in the list null   {@link Device }
     * {@link RxGeneric }
   * {@link RxLpaux }
   * {@link TxGeneric }
   * {@link TxLandMobile }
   * {@link TxLpaux }
   * {@link TxMicrowave }
   * {@link TxTv }
   * {@link TxWsd }
   *
   *
   */
  public List<Device> getDeviceOrRxGenericOrRxLpaux() {
    if (deviceOrRxGenericOrRxLpaux == null) {
      deviceOrRxGenericOrRxLpaux = new ArrayList<Device>();
    }
    return this.deviceOrRxGenericOrRxLpaux;
  }

  /**
   * Gets the value of the name property.
   * <p/>
   * @return possible object is {@link String }
   *
   */
  public String getName() {
    return name;
  }

  /**
   * Sets the value of the name property.
   * <p/>
   * @param value allowed object is {@link String }
   *
   */
  public void setName(String value) {
    this.name = value;
  }

  /**
   * Gets the value of the description property.
   * <p/>
   * @return possible object is {@link String }
   *
   */
  public String getDescription() {
    return description;
  }

  /**
   * Sets the value of the description property.
   * <p/>
   * @param value allowed object is {@link String }
   *
   */
  public void setDescription(String value) {
    this.description = value;
  }

  /**
   * Gets the value of the stationClass property.
   * <p/>
   * @return possible object is {@link EnumWsifStationClass }
   *
   */
  public EnumWsifStationClass getStationClass() {
    return stationClass;
  }

  /**
   * Sets the value of the stationClass property.
   * <p/>
   * @param value allowed object is {@link EnumWsifStationClass }
   *
   */
  public void setStationClass(EnumWsifStationClass value) {
    this.stationClass = value;
  }

  /**
   * Gets the value of the primary property.
   * <p/>
   */
  public boolean isPrimary() {
    return primary;
  }

  /**
   * Sets the value of the primary property.
   * <p/>
   */
  public void setPrimary(boolean value) {
    this.primary = value;
  }

  /**
   * Gets the value of the stationType property.
   * <p/>
   * @return possible object is {@link String }
   *
   */
  public String getStationType() {
    return stationType;
  }

  /**
   * Sets the value of the stationType property.
   * <p/>
   * @param value allowed object is {@link String }
   *
   */
  public void setStationType(String value) {
    this.stationType = value;
  }
}
